home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Franz PD / Franz PD Disk #094 (1990-10)(Amiga User Group Deutschland e.V.).zip / Franz PD Disk #094 (1990-10)(Amiga User Group Deutschland e.V.).adf / Demos / WBArgs.asm < prev    next >
Assembly Source File  |  1990-09-11  |  5KB  |  186 lines

  1. * WBArgumente by E.Hambuch DEMO
  2. * Darf nicht veraendert werden !
  3. * Nur zum Demonstrieren
  4. * Informationen aus AMIGA 12/89
  5.   include 'exec.i'
  6.   include 'dos.i'
  7.   include 'icon.i'
  8.   include 'startup.i'
  9. _main:
  10.   lea dosname,a1         ;Dos-Library oeffnen
  11.   CALLEXEC OldOpenLibrary
  12.   move.l d0,_DOSBase
  13.   beq ende
  14.   tst.l _WBenchMsg      ;Von WB gestartet
  15.   bne.s startwb         ;->JA
  16.   CALLDOS Output        ;von CLI
  17.   move.l d0,Out
  18.   beq closedos
  19.   lea clitext,a0
  20.   bsr print
  21.   bra closedos
  22. startwb:
  23.   lea iconname,a1      ;Icon-Library oeffnen
  24.   jsr _LVOOldOpenLibrary(a6)
  25.   move.l d0,_IconBase
  26.   beq closedos
  27.   move.l #window,d1    ;Fenster oeffnen
  28.   move.l #MODE_NEWFILE,d2
  29.   CALLDOS Open
  30.   move.l d0,Out
  31.   beq closeicon
  32.   move.l _WBenchMsg,a0
  33.   move.l $1c(a0),NumArgs   ;WBStartup.NumArgs  ;Anzahl der Argumente
  34.   move.l $24(a0),ArgList   ;WBStartup.ArgList  ;Zeiger auf ArgumListe
  35.   move.l NumArgs,d0        ;Zahl der Arg. ausgeben
  36.   lea text1+21,a0
  37.   bsr dez
  38.   lea text1,a0
  39.   bsr print
  40.   moveq #0,d7
  41. argloop:                   ;Argumente einzeln ausgeben
  42.   move.l ArgList,a0
  43.   move.w d7,d0
  44.   lsl.w #3,d0
  45.   move.l 4(a0,d0.w),a2    ;WBArguments->WBArg[Num].Name
  46.   move.l 0(a0,d0.w),d4                            .Lock
  47.   tst.b (a2)              ;String = $00
  48.   bne.s arg1
  49.   lea drawertxt,a0        ;Ja -> Drawer
  50.   bsr print
  51.   bra argl
  52. arg1:                     ;ArgName ausgeben
  53.   lea argtxt,a0
  54.   bsr print
  55.   move.l a2,a0
  56.   bsr print
  57.   lea rt,a0
  58.   bsr print
  59.   move.l d4,d1            ;aktuelles Directory setzen
  60.   jsr _LVOCurrentDir(a6)
  61.   move.l d0,oldlock
  62.   move.l a2,a0
  63.   CALLICON GetDiskObject  ;DiskObject holen
  64.   move.l _DOSBase,a6
  65.   move.l d0,diskobj
  66.   beq closeout
  67.   move.l d0,a4
  68.   move.b 48(a4),d0   ;DiskObject.Type
  69.   cmp.b #4,d0        ;PROJECT
  70.   bne noproj
  71.   move.l 50(a4),a0   ;DiskObject.DefaultTool
  72.   cmp.l #0,a0        ;kein Defaulttool ?
  73.   beq.s nodeft       ;Keins
  74.   tst.b (a0)         ;kein DefTool ?
  75.   beq.s nodeft       ;Keins
  76.   move.l a0,a2
  77.   lea defttxt,a0     ;DefTool vorhanden -> ausgeben
  78.   bsr print
  79.   move.l a2,a0
  80.   bsr print
  81.   lea rt,a0
  82.   bsr print
  83. nodeft:
  84. noproj:
  85.   move.l diskobj,a0
  86.   move.l 54(a0),a4   ;DiskObject.ToolType
  87.   cmp.l #0,a4
  88.   beq nottype        ;kein ToolType
  89.   lea toolttxt,a0
  90.   bsr print
  91.   move.l (a4),a0     ;erster Zeiger auf ToolType
  92.   addq.l #4,a4
  93. ttloop: move.l a0,a2
  94.   lea spacetxt,a0
  95.   bsr print
  96.   move.l a2,a0
  97.   bsr print
  98.   lea rt,a0
  99.   bsr print
  100.   move.l (a4)+,a0   ;naester Zeiger auf String
  101.   cmp.l #0,a0
  102.   bne ttloop        ;keine ToolTypes mehr ?
  103.   move.l diskobj,a0
  104.   move.l 54(a0),a0  ;DiskObject.ToolTypes
  105.   lea ToolType,a1
  106.   CALLICON FindToolType ;ist dieser String (ToolType) darin enthalten
  107.   move.l d0,d5
  108.   beq.s notvorh           ;0 -> Nein
  109.   move.l d5,a0
  110.   lea ToolTypeInh,a1
  111.   jsr _LVOMatchToolValue(a6)  ;Vergleichen
  112.   tst.l d0
  113.   beq.s notvorh    ;nicht vorhanden
  114.   lea VorhandenTxt,a0
  115.   bsr print
  116.   bra.s nottype
  117. notvorh:
  118.   lea NichtVorTxt,a0
  119.   bsr print
  120. nottype:
  121.   move.l diskobj,a0
  122.   CALLICON FreeDiskObject  ;DiskObj freigeben
  123.   move.l oldlock,d1
  124.   CALLDOS CurrentDir
  125.   move.l d0,oldlock
  126. argl:
  127.   addq.l #1,d7
  128.   cmp.l NumArgs,d7       ;schon fertig ?
  129.   bne argloop
  130. closeout:                ;auf Return warten
  131.   move.l Out,d1
  132.   move.l #dosname,d2
  133.   moveq #2,d3
  134.   CALLDOS Read
  135.   move.l Out,d1          ;alles schliessen
  136.   jsr _LVOClose(a6)
  137. closeicon:
  138.   move.l _IconBase,a1
  139.   CALLEXEC CloseLibrary
  140. closedos:
  141.   move.l _DOSBase,a1
  142.   CALLEXEC CloseLibrary
  143. ende: rts
  144. print:                  ;Text ausgeben
  145.   move.l a0,a1
  146. l00: tst.b (a1)+
  147.   bne.s l00
  148.   suba.l a0,a1
  149.   move.l Out,d1
  150.   move.l a0,d2
  151.   move.l a1,d3
  152.   subq.l #1,d3
  153.   move.l _DOSBase,a6
  154.   jmp _LVOWrite(a6)
  155. dez:                   ;Byte-Zahl in String
  156.   divu #10,d0
  157.   add.b #'0',d0
  158.   move.b d0,(a0)+
  159.   swap d0
  160.   add.b #'0',d0
  161.   move.b d0,(a0)
  162.   rts
  163. dosname: DOSNAME
  164. iconname: ICONNAME
  165. _DOSBase:   dc.l 0
  166. _IconBase:  dc.l 0
  167. Out:       dc.l 0
  168. NumArgs:   dc.l 0
  169. ArgList:   dc.l 0
  170. oldlock:   dc.l 0
  171. diskobj:   dc.l 0
  172. clitext: dc.b 'Bitte von Workbench starten !',10,0
  173. window: dc.b 'CON:0/0/640/256/WBArguments-Demo  Written by E.Hambuch',0
  174. text1: dc.b 'Anzahl der Argumente:   ',10,0
  175. drawertxt: dc.b 'Bitte keine Drawer,Garbage oder Disks',10,0
  176. rt: dc.b 10,0
  177. argtxt: dc.b   'Argument: ',0
  178. defttxt: dc.b  '     DefaultTool = ',0
  179. toolttxt: dc.b '     ToolTypes = ',10,0
  180. spacetxt: dc.b '         ',0
  181. ToolType: dc.b 'TOOLTYPE',0
  182. ToolTypeInh: dc.b 'DUMMY',0
  183. VorhandenTxt: dc.b '     Parameter "DUMMY" ist vorhanden !',10,0
  184. NichtVorTxt: dc.b '     Parameter "DUMMY" nicht vorhanden !',10,0
  185.   end
  186.